package com.tzy.shoppingcart.controller;


import com.tzy.common.constant.CacheConstant;
import com.tzy.common.constant.WebResult;
import com.tzy.common.constant.WebResultMsgCode;
import com.tzy.common.controller.BaseController;
import com.tzy.common.entity.Orders;
import com.tzy.common.entity.ShoppingCart;
import com.tzy.shoppingcart.service.ShoppingCartService;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Delete;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

/**
 * <p>
 * 购物车表 前端控制器
 * </p>
 *
 * @author 刘舒
 * @since 2022-03-07
 */
@RestController
@RequestMapping("/shopping-cart")
public class ShoppingCartController extends BaseController {
    @Resource
    private ShoppingCartService shoppingCartService;

    /**
     * 根据id连表查询购物车信息
     *
     * @return
     */
    @GetMapping("/shopping")
    public WebResult shopping(HttpServletRequest request) {
        int userId = getUserId(request);
        List<ShoppingCart> list = shoppingCartService.getList(userId);
        return new WebResult(WebResultMsgCode.SUCCESS).putData("list", list);
    }


    /**
     * 根据id和店铺id连表查询购物车信息
     *
     * @param shopId
     * @return
     */
    @GetMapping("/findByShop")
    public WebResult findByShop(HttpServletRequest request, @RequestParam int shopId) {
        int userId = getUserId(request);
        List<ShoppingCart> list = shoppingCartService.findByShop(userId, shopId);
        return new WebResult(WebResultMsgCode.SUCCESS).putData("list", list);
    }

    /**
     * 根据购物车id连表查询购物车信息
     *
     * @param cartId
     * @return
     */
    @GetMapping("/cart")
    public WebResult cart(@RequestParam int cartId) {
        ShoppingCart cart = shoppingCartService.getCart(cartId);
        return new WebResult(WebResultMsgCode.SUCCESS).putData("cart", cart);
    }

    /**
     * 修改购物车信息
     *
     * @param shoppingCart
     * @return
     */
    @PostMapping("/update")
    public WebResult update(@RequestBody ShoppingCart shoppingCart) {
        int jg = shoppingCartService.update(shoppingCart);
        if (jg > 0) {
            return new WebResult(WebResultMsgCode.SUCCESS).putData("update", true);
        } else {
            return new WebResult(WebResultMsgCode.SUCCESS).putData("update", false);
        }
    }

//    /**
//     * 添加购物车
//     * @param
//     * @return
//     */
//    @PostMapping("/insert")
//    public WebResult insert(HttpServletRequest request,@RequestParam("dishesId") int dishesId,
//                            @RequestParam("shopId")int shopId,@RequestParam("orderNumber")int orderNumber){
//        int userId=getUserId(request);
//        ShoppingCart shoppingCart=new ShoppingCart();
//        shoppingCart.setUserId(userId);
//        shoppingCart.setShopId(shopId);
//        shoppingCart.setDishesId(dishesId);
//        shoppingCart.setOrderNumber(orderNumber);
//        int jg=shoppingCartService.insert(shoppingCart);
//        if(jg>0){
//            return new WebResult(WebResultMsgCode.SUCCESS).putData("insert", true);
//        }else {
//            return new WebResult(WebResultMsgCode.SUCCESS).putData("insert", false);
//        }
//    }

    /**
     * 添加购物车
     *
     * @param
     * @return
     */
    @PostMapping("/insert")
    public WebResult insert(HttpServletRequest request, @RequestBody ShoppingCart shoppingCart) {
        int userId = getUserId(request);
        ShoppingCart result = shoppingCartService.findByUidAndPid(userId, shoppingCart.getDishesId());
//        if (shoppingCartService.findTotal(userId) < 5) {
            // 判断查询结果是否为null
            if (result == null) {
                // 是：表示该用户的购物车没有该商品，则需要执行insert操作
                // -- 调用shoppingCartService.getById()得到商品详情，该数据中包含商品价格
                shoppingCart.setUserId(userId);
                int jg = shoppingCartService.insert(shoppingCart);
                if (jg > 0) {
                    return new WebResult(WebResultMsgCode.SUCCESS).putData("insert", true);
                } else {
                    return new WebResult(WebResultMsgCode.FAIL).putData("insert", false);
                }
            } else {
                // 否：表示该用户的购物车已有该商品，则需要执行update操作增加数量
                // -- 从查询结果中获取cid
                Integer cid = result.getId();
                // -- 从查询结果中取出原有数量，与参数amount相加，得到新的数量
                Integer num = result.getOrderNumber() + 1;
                // -- 调用updateNumByCid()执行修改数量
                int jg = shoppingCartService.updateNumByCid(cid, num);
                if (jg > 0) {
                    return new WebResult(WebResultMsgCode.SUCCESS).putData("update", true);
                } else {
                    return new WebResult(WebResultMsgCode.FAIL).putData("update", false);
                }
            }
//        } else {
//            return new WebResult(WebResultMsgCode.FAIL).putData(CacheConstant.MESSAGE, "您的购物车已达到限制数量!");
//        }

    }
//
//    @Override
//    public void addToCart(Integer uid, String username, Integer pid, Integer amount) {
//        // 创建当前时间对象now
//        Date now = new Date();
//        // 调用findByUidAndPid()查询购物车详情
//        Cart result = findByUidAndPid(uid, pid);
//        // 判断查询结果是否为null
//        if (result == null) {
//            // 是：表示该用户的购物车没有该商品，则需要执行insert操作
//            // -- 调用productService.getById()得到商品详情，该数据中包含商品价格
//            Product product = productService.getById(pid);
//            // -- 创建新的Cart对象
//            Cart cart = new Cart();
//            // -- 补全Cart对象的属性：uid > 参数uid
//            cart.setUid(uid);
//            // -- 补全Cart对象的属性：pid > 参数pid
//            cart.setPid(pid);
//            // -- 补全Cart对象的属性：num > 参数amount
//            cart.setNum(amount);
//            // -- 补全Cart对象的属性：price > 以上查询到的商品详情中包含价格
//            cart.setPrice(product.getPrice());
//            // -- 补全Cart对象的属性：4个日志 > 参数username, now
//            cart.setCreatedUser(username);
//            cart.setCreatedTime(now);
//            cart.setModifiedUser(username);
//            cart.setModifiedTime(now);
//            // -- 调用insert()插入数据
//            insert(cart);
//        } else {
//            // 否：表示该用户的购物车已有该商品，则需要执行update操作增加数量
//            // -- 从查询结果中获取cid
//            Integer cid = result.getCid();
//            // -- 从查询结果中取出原有数量，与参数amount相加，得到新的数量
//            Integer num = result.getNum() + amount;
//            // -- 调用updateNumByCid()执行修改数量
//            updateNumByCid(cid, num, username, now);
//        }
//    }


//    /**
//     * 添加购物车
//     * @param
//     * @return
//     */
//    @PostMapping("/insert")
//    public WebResult insert(ShoppingCart shoppingCart,HttpServletRequest request){
//        int userId=getUserId(request);
//        int jg=shoppingCartService.insert(shoppingCart);
//        if(jg>0){
//            return new WebResult(WebResultMsgCode.SUCCESS).putData("insert", true);
//        }else {
//            return new WebResult(WebResultMsgCode.SUCCESS).putData("insert", false);
//        }
//    }
    /**
     * 根据id删除购物车信息
     * @param request
     * @param id
     * @return
     */
    @GetMapping("/delete")
    public WebResult removeById(HttpServletRequest request, @RequestParam int id){
        int jg=shoppingCartService.removeById( id );
        if(jg>0){
            return new WebResult(WebResultMsgCode.SUCCESS).putData("delete", true);
        }else {
            return new WebResult(WebResultMsgCode.FAIL).putData("delete", false);
        }
    }

//    /**
//     * 批量删除购物车
//     * @param ids
//     * @return
//     */
//    @DeleteMapping("/{ids}")
//    public WebResult remove(@PathVariable("ids") String ids) {
//        System.err.println(ids);
//        String[] shopIds = ids.split(",");
//        for (String shopId : shopIds) {
//            System.err.println(shopId);
//            shoppingCartService.removeById(shopId);
//        }
//        return new WebResult(WebResultMsgCode.SUCCESS).putData("delete", true);
//    }
    /**
     * 批量删除订单信息
     * @param ids
     * @return
     */
    @GetMapping("/remove")
    public WebResult remove(String[] ids){
//        String[] ids= ids.split(",");
        int jg =shoppingCartService.deleteShoppingCartByIds(ids);
        if(jg>0){
            return new WebResult(WebResultMsgCode.SUCCESS).putData("delete", true);
        }else {
            return new WebResult(WebResultMsgCode.SUCCESS).putData("delete", false);
        }

    }
}
